iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 4
0
Software Development

python 自學系列 第 4

python day4 (numbers)

  • 分享至 

  • xImage
  •  

numbers

由於 python 幾乎都是物件,所以關於數字的型態也不例外.

>>> type(1)
<class 'int'>
>>> type(1.1)
<class 'float'>
>>> type(complex(1.1))
<class 'complex'>
>>> print(complex(1.1))
(1.1+0j)

float

在對浮點數做操作時,會有 IEEE 754 浮點數精確度的問題,導致有些 10 進制小數無法完美的用2進制表示.例如 0.1 轉二進位為 0.00011001100... 的循環小數.
1 * 2^-4 + 1 * 2^-5 + 1 * 2^-8 + 1 * 2^-9 + ...
= 1/16 + 1/32 + 1/256 + 1/512 + …
所以這樣算出來的數值會跟實際的 0.1 有些誤差,但很接近.由於精確度的問題導致在計算浮點數時,答案有時會不如預期 :

>>> 3 * 0.1
0.30000000000000004
>>> 0.3 * 1
0.3
>>> 1.1 + 2.2
3.3000000000000003

當需要精準的計算時,可以使用 Python Decimal module

>>> from decimal import *
>>> Decimal('3') * Decimal('0.1')
Decimal('0.3')

>>> Decimal('1.1') + Decimal('2.2')
Decimal('3.3')

round

如果想要取浮點數四捨五入取到第幾位,可以使用 round.

>>> round(1.235,2)
1.24

還可以使用負值取四捨五入,-1 代表 10 位數,-2 代表百位數,-3 代表千位數,以此類推.

>>> round(188.235,-1)
190.0
>>> round(188.235,-2)
200.0
>>> round(188.235,-3)
0.0

format

也可以使用 format 來取四捨五入

>>> format(1.254 , '0.2f')
'1.25'
>>> format(1.254 , '0.1f')
'1.3'
>>> 'number format is {:0.1f}'.format(1.254)
'number format is 1.3'

format 成二進位

>>> format(5,'b')
'101'

format 成八進位

>>> format(10,'o')
'12'

format 成十六進位

>>> format(10,'x')
'a'

string & number operator

在 pythone 裡 string 和 number 是不允做計算的.但有兩個運算子例外 % 和 * .

使用 % 符號時,會把 % 右邊的 object 帶入左邊 str 的 string format 裡.

>>> print('num is %s ' % 2)
num is 2
>>> 'num is %s ' % 2
'num is 2 '
>>> 'num is %s ' % '100'
'num is 100 '

使用 * 符號時,會把字串重覆印出幾次.

>>> 'Hello ' * 2
'Hello Hello '
>>> '100' * 2
'100100'

division

python 使用除法時結果會是浮點數,如果是要整數的話是使用 //.如果被除數是負數使用//是向下取整數.比如說 -7//3 = -2.3 向下取整數的話就會變 -3.

>>> 16 / 3
5.333333333333333
>>> 16 // 3
5
>>> 16 / 4
4.0
>>> 16 // 4
4
>>> -7 // 3
-3

python 在取餘數時,如果分子分母分別為正數或負數時,可以使用下列公式做計算 餘數 = 被除數-除數*(被除數 // 除數)

>>> 1 % -3
-2

上面的例子套公式算 1 - -3 * (1 // -3) = 1 - -3*(-1) = -2.

>>> -1 % 3
2
>>> -1 % -3
-1
>>> 1 % 3
1

power

指數符號是 **

>>> 3 ** 3
27

python 的數字如果超過 int 範圍時,python 會自動幫忙轉成 long int,可以減少記憶體的浪費.

>>> num = 100 ** 100
>>> type(num)
<class 'int'>
>>> print(num)
100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

上一篇
python day3 (object)
下一篇
python day5 (string、dir、help)
系列文
python 自學30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言